import React from 'react';
import ReactDOM from 'react-dom';
import './index.scss';


// import './index.scss';
import PageTitle from 'component/page-title/index.js';
import Pageination from 'util/pageination/index.js';
import Tablist from 'util/table-list/index.js';

import ListSearch from './index-list-search';


import MUtil from 'util/mm.js';
import Product from 'servers/product-server.js';

const _product = new Product();
const _mm = new MUtil();

import { Link } from 'react-router-dom';
class ProductList extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            list: [],
            pageNum: 1,
            listType:'list'

        }
    }
    // 生命周期 渲染完成之后
    componentDidMount() {
        this.loadProductList();
    }
    loadProductList() {
        let listParam = {};
        listParam.listType=this.state.listType;
        listParam.pageNum = this.state.pageNum;
       
//判断 如果是搜索的话 需要传入搜索的类型和关键字
            if(this.state.listType === 'search'){
                // 这里是把 输入的关键词
                listParam.searchType = this.state.searchType;
                listParam.Keyword = this.state.searchKeyword; 
                console.log('查看点击搜索拿到的输入数据'+ listParam.searchType,listParam.Keyword);
            }
    // 请求接口
        _product.getProductList(listParam).then(res => {
            // 注意这块 
            // 在这里 我们传入的res res 是请求成功后 
            // Promise 里的resolve方法里传过来的res.data
            // 然后用res.data里的数据完全替换this.state里的数据

            // 在加载用户信息的时候 添加了一个回调函数
            this.setState(res);
        }, errMsg => {
            this.setState({
                list: []
            });
            _mm.errorTips(errMsg);
        });
    }
    // 当页数发生变化的时候
    onPageNumChange(pageNum) {
        // 这里需要注意 setState 是异步函数 它并不是同步的
        this.setState({
            pageNum: pageNum

            // 下面添加了一个回调
            // 当setState执行完成后也就是页数传递后
            // 执行了一个 loadUserList（）来进行加载数据
        }, () => {
            // 这里的loadUserList （）里什么都不用传
            this.loadProductList();
        })
    }
    // 改变商品状态 用来判断上下架功能
    onSetProductStatus(e,productId, currentStatus){
        let newStatus    = currentStatus ==1 ? 2 : 1,
            confirmTips  = currentStatus == 1 ?'确认要下架该商品吗？':'确认要上架该商品吗？';
        // 在操作之前 做一个操作提醒 防止误操作
        if (window.confirm(confirmTips)){
            _product.onSetProductStatus({
                productId:productId,
                status: newStatus
            }).then(res =>{
                _mm.successTips(res);
                // 列表重新加载
                this.loadProductList();
            }, errMsg =>{
                _mm.errTips(res);
            });
        }
    }
    // 搜索功能
    onSearch(searchType,searchKeyword){
        console.log(searchType,searchKeyword);
        let listType = searchKeyword ==='' ? 'list':'search';
        this.setState({
            listType       :listType,
            pageNum        :1,
            searchType     :searchType,
            searchKeyword  :searchKeyword,
            
        },//这里 又添加了一个回调
        ()=>{
            console.log('3'+searchType,searchKeyword);
            this.loadProductList();
        });
    }
    render() {
        let tableHeads=[
            {name:'商品ID',width:'10%' },
            {name:"商品信息",width:"50%" },
            {name:"商品价格",width:"10%" },
            {name:"状态",width:"15%" },
            {name:"操作",width:"15%" },
        ]
        return (
            <div id="page-wrapper">
                <PageTitle title="商品列表" >
                    <div className="page-header-right">
                       
                       <Link to="/product/save" className="btn btn-primary">
                            <i className="fa fa-plus"></i>
                            <span>添加商品</span>
                       </Link>        
                    </div>
                </PageTitle>
                    <ListSearch onSearch={(searchType,searchKeyword)=>{this.onSearch(searchType,searchKeyword)}}/>
                {/* 这里用了 重构  简洁代码 */}
                <Tablist tableHeads= {tableHeads} >
                    {
                        this.state.list.map((product, index) => {
                            return (
                                <tr key={index}>
                                    <td>{product.id}</td>
                                    <td>
                                        <p>{product.name}</p> 
                                        <p>{product.subtitle}</p>
                                    </td>
                                    <td>${product.price}</td>
                                    <td>
                                        <p>
                                            {product.status == 1 ?"在售":"下架"}
                                        </p>
                                        <button className="btn btn-xs btn-warning" onClick={(e) => { this.onSetProductStatus(e, product.id, product.status)}}>{product.status == 1 ? "下架" : "上架"}</button>
                                    </td>
                                    <td>
                                        <Link className="opear" to={ `/product/detail/${product.id}`}>查看详情</Link>
                                        <Link className="opear" to={ `/product/save/${product.id}`}>编辑</Link>
                                    </td>
                                </tr>
                            )
                        })
                    }
                </Tablist>
                {/*  */}
                <Pageination
                    current={this.state.pageNum}
                    total={this.state.total}
                    onChange={(pageNum) => { this.onPageNumChange(pageNum) }}
                />
            </div>
        )
    }
}

export default ProductList;
